package model;


import java.util.Arrays;

/**
 * Менджер колонок над объектом типа {@link Enum enum}.
 * 
 * @author aemaeth
 * 
 * @param <V>
 *            тип объекта
 */
public class EnumMapper<V> extends ListMapper<V> {

	public EnumMapper(Class<? extends Enum<? extends SingleMapper<V>>> clazz) {
		super(Arrays.asList(get(clazz)));
	}

	private static <V> SingleMapper<V>[] get(Class<? extends Enum<? extends SingleMapper<V>>> clazz) {
		@SuppressWarnings("unchecked")
		SingleMapper<V>[] enumConstants=(SingleMapper<V>[]) clazz.getEnumConstants();
		if (enumConstants == null)
			throw new IllegalArgumentException("Not a enum class!");
		
		return enumConstants;
	}

	/**
	 * Фабричный метод создания менеджера из класса {@code enum}'а.
	 * 
	 * @param clazz
	 *            класс {@code enum}'а
	 * @return менеджер над объектами этого {@code enum}'а
	 */
	public static <E> EnumMapper<E> of(Class<? extends Enum<? extends SingleMapper<E>>> clazz) {
		return new EnumMapper<E>(clazz);
	}
}